package com.visionet.waveletData.web.service.account;

import com.visionet.waveletData.web.common.constant.BusinessStatus;
import com.visionet.waveletData.web.common.constant.SysConstants;
import com.visionet.waveletData.web.common.utils.PageInfo;
import com.visionet.waveletData.web.common.utils.SearchFilterUtil;
import com.visionet.waveletData.web.entity.account.Resource;
import com.visionet.waveletData.web.entity.account.Role;
import com.visionet.waveletData.web.repository.account.ResourceDao;
import com.visionet.waveletData.web.repository.account.RoleDao;
import com.visionet.waveletData.web.service.BaseService;
import com.visionet.waveletData.web.service.pubinterface.account.IRoleService;
import com.visionet.waveletData.web.vo.account.RoleVo;
import com.visionet.waveletData.web.web.BaseController;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springside.modules.persistence.DynamicSpecifications;
import org.springside.modules.persistence.SearchFilter;
import org.springside.modules.persistence.SearchFilter.Operator;

import java.util.List;
import java.util.Map;

//@Service
//public class RoleService extends BaseService implements IRoleService {
//	
//	@Autowired
//	private RoleDao roleDao;
//
//	@Autowired
//	private ResourceDao resourceDao;
//	
//	@Override
//	public Role getRole(Long id) {
//		return roleDao.findOne(id);
//	}
//
//    public Long getRoleIdByName(String name){
//        Role role = roleDao.findByName(name);
//        if(role==null){
//            throwException(BusinessStatus.NOTFIND,"role name is not exist!");
//        }
//        return role.getId();
//    }
//
//
//
//    public Page<Role> searchRoles(RoleVo vo) throws Exception{
//        Map<String, Object> searchParams = SearchFilterUtil.convertBean(vo);
//        PageInfo pageInfo = vo.getPageInfo();
//        if(pageInfo == null){
//            pageInfo = new PageInfo();
//        }
//
//        Map<String, SearchFilter> filters = SearchFilterUtil.parse(searchParams);
//
//        if(!AccountService.isSupervisor(BaseController.getCurrentUserId())){
//            filters.put("type", new SearchFilter("type", Operator.EQ, SysConstants.COMMON_ROLE_TYPE));
//        }
//        filters.put("id", new SearchFilter("id", Operator.GT, 1L));
//        if(filters.get("roleDesc")!=null){
//            filters.put("roleDesc", new SearchFilter("roleDesc", Operator.LIKE, filters.get("roleDesc").value));
//        }
//        if(filters.get("permissions")!=null){
//            filters.put("permissions", new SearchFilter("permissions", Operator.LIKE, filters.get("permissions").value));
//        }
//
//        PageRequest pageRequest = buildPageRequest(pageInfo.getPageNumber(), pageInfo.getPageSize(),pageInfo.getSortColumn());
//
//        return roleDao.findAll(DynamicSpecifications.bySearchFilter(filters.values(), Role.class), pageRequest);
//    }
//	
//	public Page<Role> searchRole(Map<String, Object> searchParams,
//			int pageNumber, int pageSize,String sortType) {
//		PageRequest pageRequest = buildPageRequest(pageNumber, pageSize, sortType);
//		Specification<Role> spec = buildSpecification( searchParams);
//
//		return roleDao.findAll(spec, pageRequest);
//	}
//	
//
//
//	/**
//	 * 创建动态查询条件组合.
//	 */
//	private Specification<Role> buildSpecification( Map<String, Object> searchParams) {
//		Map<String, SearchFilter> filters = SearchFilter.parse(searchParams);
//		if(!AccountService.isSupervisor(BaseController.getCurrentUserId())){
//			filters.put("type", new SearchFilter("type", Operator.EQ, SysConstants.COMMON_ROLE_TYPE));
//		}
//		filters.put("id", new SearchFilter("id", Operator.GT, 1L));
//		
//		
//		Specification<Role> spec = DynamicSpecifications.bySearchFilter(filters.values(), Role.class);
//		return spec;
//	}
//	
//	
//	
//	@Override
//	@Transactional(readOnly = false)
//	public void saveRole(Role entity) {
//		roleDao.save(entity);
//	}
//	
//	@Override
//	@Transactional(readOnly = false)
//	public void deleteRole(Long id) {
//		roleDao.delete(id);
//	}
//	
//	
//	public List<Resource> getAllPermissions() {
//		return resourceDao.findAllPermission();
//	}
//	
//	
//	public Role findRoleByName(String roleName) {
//		return roleDao.findByName(roleName);
//	}
//
//}
